Skip to content

HJ57 高精度整数加法 ​

本节目标:理解“HJ57 高精度整数加法”的核心思路,并能把它用于实际开发或面试表达。 中等 通过率:35.40% 时间限制:1秒 空间限制:32M 知识点==字符串== 描述 输入两个用字符串 str 表示的整数,求它们所表示的数之和。 数据范围: 1≤���(���)≤10000 1≤len(str)≤10000 输入描述: 输入两个字符串。保证字符串只含有'0'~'9'字符 输出描述: 输出求和后的结果 示例1 输入: 98765432101234567890 ==复制== 输出: 11111111100 ==复制==

这个问题可以通过模拟数字加法的过程来解决,尤其是当我们需要处理超出常规整数范围的大数时。具体方法是将两个字符串从尾部开始,即最低位开始逐位相加,记录进位,然后将结果以字符串形式输出。这种方法不受编程语言内置整数类型大小的限制。

以下是一个实现的步骤:

  1. 首先,将两个输入字符串反转,这样字符串的开始位置就表示数字的最低位。
  2. 然后,逐位进行加法运算。如果某一位的计算结果超过9,则记录进位值(进位值要么是0,要么是1,因为两个数字相加最多只能产生1的进位)。
  3. 将每一步的计算结果(考虑进位)转换为字符串,并添加到结果字符串中。
  4. 如果最后还有进位,需要将进位也添加到结果字符串中。
  5. 最后,将结果字符串反转回来,得到最终的求和结果。

这里给出一个相应的Python代码示例:

def addStrings(num1, num2):

反转两个字符串,使得最低位在前 ​

num1, num2 = num1[::-1], num2[::-1] carry = 0 result = []

遍历较长数字的每一位 ​

for i in range(max(len(num1), len(num2))): n1 = int(num1[i]) if i < len(num1) else 0 n2 = int(num2[i]) if i < len(num2) else 0

计算当前位的总和加上前一位的进位 ​

total = n1 + n2 + carry

计算当前位的值和新的进位 ​

carry = total // 10 result.append(str(total % 10))

如果最后还有进位,添加到结果中 ​

if carry: result.append(str(carry))

将结果反转回正常的顺序并转换为字符串 ​

return "".join(result[::-1])

示例 ​

num1 = input() num2 = input() print(addStrings(num1, num2))

这段代码能够处理包含数千位数字的字符串加法,而不会遇到整数溢出问题。

本站总访问 — 次